/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package familytree.struts.actions;

import Funciones.RinconUsuario.FuncionesUtiles;
import familytree.negocio.IArbolProcessor;
import familytree.negocio.INodoProcessor;
import familytree.negocio.bo.ArbolBO;
import familytree.negocio.bo.NodoBO;
import familytree.negocio.bo.UsuarioBO;
import familytree.persistencia.pojos.Nodo;
import familytree.persistencia.pojos.Usuario;
import familytree.struts.forms.CorreoForm;
import familytree.util.ITree;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;

/**
 *
 * @author Jose Antonio
 */
public class RinconUsuarioAction extends org.apache.struts.action.Action {

    /* forward name="ok" path="" */
    private final static String OK = "ok";

    /**
     * This is the action called from the Struts framework.
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @throws java.lang.Exception
     * @return
     */
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        
        String accion = request.getParameter("accionSeleccionada");
        String idAux = (String) request.getSession().getAttribute("idSeleccionado");
        //Cierre de sesion
        if (accion.toLowerCase().equals("cerrarsesion")) {
            request.getSession().invalidate();
            return mapping.findForward("cerrarSesion");
        } else if (accion.toLowerCase().equals("cambiarfoto")) {
            return mapping.findForward("cambiarFoto");
        } //Si es editar, se edita
        else if (accion.toLowerCase().equals("editar")) {
            return mapping.findForward("editar");
        } //Se añade la pareja
        else if (accion.equals("anadirPareja")) {
            return mapping.findForward("anadirPareja");
        } else if (accion.equals("verArbol")) {
            return mapping.findForward("verArbol");
        } //Si es pareja se trata de añadir hijo a la pareja que indique la cadena
        else if (accion.equals("anadirHijo")) {
            //Capturamos el id  de la pareja y vamos a la siguiente pagina
            String idPareja = request.getParameter("parejaSeleccionada");
            request.setAttribute("parejaSeleccionada", idPareja);
            
            return mapping.findForward("anadirHijo");
        } //Si se pulsa sobre algun miembro de la familia
        else if (accion.contains("enlace")) {
            //Capturamos su id incluido 
            String id = FuncionesUtiles.capturaId(accion);
            Usuario usActual = (Usuario) request.getSession().getAttribute("usuarioActual");

            //Capturamos el nodo completo para el id seleccionado

            //Hacemos de ese nodo el nodo actual
            INodoProcessor nodoBd = new NodoBO();
            
            Nodo nodoActual = nodoBd.getNodoPorIdNodo(id);
            Nodo nd = nodoBd.getNodoPorIdNodo(usActual.getNodo().getIdNodo());
            IArbolProcessor arbolBO = new ArbolBO();
            ITree[] familia = (ITree[]) request.getSession().getAttribute("familia");            
            String[][] localizacion = arbolBO.getruta(nodoActual, familia);
            request.getSession().setAttribute("localizacion", localizacion);
            request.getSession().setAttribute("nodoActual", nodoActual);
            
            return mapping.findForward("vuelve");
        } //si la opción fue añadir padre
        else if (accion.equals("anadirPadre")) {
            return mapping.findForward("anadirPadre");
        } //si la opción fue añadir madre
        else if (accion.equals("anadirMadre")) {
            
            return mapping.findForward("anadirMadre");
        } else if (accion.toLowerCase().equals("correo")) {
            Nodo nodoActual = (Nodo) request.getSession().getAttribute("nodoActual");
            Usuario usuarioActual = (Usuario) request.getSession().getAttribute("usuarioActual");
            String nombreCompleto = usuarioActual.getNombre() + " " +
                    usuarioActual.getPrimerApellido() + " " + usuarioActual.getSegundoApellido();
            String idNodo = String.valueOf(nodoActual.getIdNodo());
            CorreoForm cf = (CorreoForm) form;
            String correoElectronico = cf.getCorreoElectronico();
            String mensaje = cf.getMensaje();
            if (!FuncionesUtiles.esCorrecto(correoElectronico)) {
                request.setAttribute("falloCorreo", true);
                return mapping.findForward("falloCorreo");
            } else if (FuncionesUtiles.existeCorreo(correoElectronico)) {
                request.setAttribute("existeCorreo", true);
                return mapping.findForward("falloCorreo");
            } else {                
                String clave = servlet.getServletContext().getInitParameter("clave");
                
                IArbolProcessor arbolbd = new ArbolBO();
                arbolbd.invitarFamiliar(correoElectronico, mensaje, idNodo, clave, nombreCompleto);
                return mapping.findForward("vuelve");
            }
        } else if (accion.toLowerCase().equals("busqueda")) {
            Nodo nodo = (Nodo) request.getSession().getAttribute("nodoActual");
            String idArbol = nodo.getArbol().getIdArbol();
            IArbolProcessor arbolBO = new ArbolBO();
            String nombre = request.getParameter("buscador");
            List<Nodo> nodos = arbolBO.findNodoByCompleteName(nombre, idArbol);
            if (nodos.size() == 1) {
                request.getSession().setAttribute("nodoActual", nodos.get(0));
                ITree[] familia = (ITree[]) request.getSession().getAttribute("familia");                
                String[][] localizacion = arbolBO.getruta(nodos.get(0), familia);
                request.getSession().setAttribute("localizacion", localizacion);
                return mapping.findForward("vuelve");
            }
            
            else{
                request.setAttribute("resultadoBusqueda", nodos);
                return mapping.findForward("buscar");
            }
            
        }
        
        return mapping.findForward(OK);
        
    }
}